home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
util
/
cli
/
foreach.lha
/
foreach.dok
< prev
Wrap
Text File
|
1994-07-20
|
4KB
|
152 lines
Foreach - Deluxe
================
Version 1.0
(31.3.94)
Dieses Foreach-Kommando ermöglicht es, mit Kommandos, die normalerweise
keine Jokerzeichen unterstützen (z.B. Rename), solche zu verwenden. Es
ist aber so flexibel, daß es ein weit größeres Anwendungsgebiet hat und
man es so schon nach kurzer Zeit nicht mehr missen möchte.
Aufruf:
-------
foreach <Muster> <Kommando>
Einführung:
-----------
Da ich meine, daß man das Kommando am besten an Beispielen erlernen kann,
zuerst einige Beispiele zur Einführung:
- Anzeigen aller Dateien, die auf .c enden mit dem 'more' Befehl:
foreach #?.c more &
Das Muster ist hierbei #?.c . Das Kommando wird nun für jedes passende
File aufgerufen, wobei das '&'-Zeichen jedesmal durch den Filenamen
ersetzt wird.
- Alle #?.lha und #?.lzh Dateien in die RamDisk entpacken:
foreach #?.(lha|lzh) lha x & ram:
- Abändern der Endung .lzh in .lha bei allen Files:
foreach #?.lzh rename & &<.lha
Das ist neu! Die Zeichen '&<' werden im Gegensatz zum einfachen '&' durch
den Filenamen ohne Endung ersetzt.
- Dreifaches Kopieren einer Datei:
foreach {copy1,copy2,copy3} copy Original &
Erzeugt drei Kopien von Original mit den Namen copy1,copy2 und copy3.
- Compilieren aller #?.cc Dateien mit gcc:
foreach #?.cc gcc $
Man beachte: Das '$'-Zeichen wird auf einmal zu allen passenden Files
expandiert, es wird also nur ein Kommando erzeugt, das z.B. so aussehen
könnte: ( gcc file1.cc file2.cc file3.cc )
Referenz:
---------
& - wird bei jedem Kommando, das erzeugt wird, durch einen passenden
String aus dem Muster (z.B. dem Filenamen) ersetzt.
&< - wie '&', nur wird hier die Endung weggelassen (die letzte Endung,
falls es mehrere Punkte im Namen gibt). Gibt es keinen Punkt, so
wird (wie bei '&') der komplette String verwendet.
&> - wie '&', nur wird hier nur die Endung übernommen (die letzte Endung).
Falls keine Endung existiert, wird ein leerer String verwendet
(also auch kein Leerzeichen).
$ - wird durch alle passenden Strings aus dem Muster (gleichzeitig)
ersetzt (durch je ein Leerzeichen getrennt, am Anfang und Ende kein
Leerzeichen).
&& - wird durch ein einzelnes '&'-Zeichen ersetzt.
% - wird durch einen leeren String ersetzt.
Bemerkungen:
------------
- In der Mengenangabe können auch leere Elemente vorkommen. Also z.B.:
{} oder {aaa,aa,a,}.
- Vorsicht! Kommen in einem String in der Menge Leerzeichen vor, so muß
die Menge in Anführungszeichen gesetzt werden, da der Commandline-Parser
ja an den Leerzeichen die Argumente auseinanderschneidet:
Falsch: {Hugo Klein,Ernie,Bert}
Richtig: "{Hugo Klein,Ernie,Bert}"
- Sobald in einem Kommando ein '&'-Zeichen vorkommt, werden mehrere
einzelne Kommandos erzeugt. (Kommen also nur '$'-Zeichen vor, so
wird nur ein Kommando erzeugt).
Tips:
-----
- Es ist möglich, mehrere 'foreach'-Kommandos zu schachteln, wodurch das
Kommando noch leistungsfähiger wird.
Beispiel: Anfertigen von zwei Sicherheitskopien aller #?.c Dateien:
foreach #?.c foreach {bak1,bak2} copy & &<.&&
Man beachte, daß das erste 'foreach' das '&&'-Zeichen zu einem einzelnen
'&' verkürzt, so daß das zweite 'foreach' z.B. so aussieht:
foreach {bak1,bak2} file1.c file1.&
- Das '%' Zeichen dient vor allem dazu, Mehrdeutigkeiten zu verhindern.
Man will z.B. einen String zweimal direkt hintereinander schreiben:
Falsch: foreach {hallo,test,moin} echo &&
Richtig: foreach {hallo,test,moin} echo &%&
Copyright:
Diese Programm ist Public Domain. Es darf beliebig kopiert werden unter
der Voraussetzung, daß das Programm und diese Anleitung in keiner Weise
verändert werden und das Programm nie getrennt von der Anleitung kopiert
wird.
Das Programm darf ohne meine Erlaubnis weder verkauft, noch zu
kommerziellen Produkten hinzugefügt werden (bitte vorher Brief oder EMail
an mich).
Dirk Farin
Kapellenweg 15
72070 Tübingen
Germany
EMail: farindk@trick.informatik.uni-stuttgart.de
Über Bug-Reports und Verbesserungsvorschläge würde ich mich sehr freuen!